package br.siteep.entidades.dao;

import br.siteep.conexao.Conexao;
import br.siteep.entidades.Aluno;
import br.siteep.entidades.Classificacao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class AlunoDao {

    private PreparedStatement ps;
    private ResultSet rs;
    
    public boolean cadastrar(Aluno aluno){
        
        //Pegando valores
        String nome = aluno.getNome();
        int escola = aluno.getEscola();
        
        //Notas
        double portugues = aluno.getPortugues();
        double matematica = aluno.getMatematica();
        double historia = aluno.getHistoria();
        double geografia = aluno.getGeografia();
        double ciencias = aluno.getCiencias();
        double ingles = aluno.getIngles();
        double educacaoFisica = aluno.getEducacaoFisica();
        double artes = aluno.getArtes();
        double religiao = aluno.getReligiao();
        
        try {
        
            ps = new Conexao().getConnection().prepareStatement("INSERT INTO aluno(nome, curso, escola, portugues,"
                    + " matematica, historia, geografia, ciencias, ingles, educacao_fisica, artes, religiao, media) "
                    + "VALUES (?,0,?,?,?,?,?,?,?,?,?,?,0)");
        
            //Setando valores
            ps.setString(1, nome);
            ps.setInt(2, escola);
            ps.setDouble(3, portugues);
            ps.setDouble(4, matematica);
            ps.setDouble(5, historia);
            ps.setDouble(6, geografia);
            ps.setDouble(7, ciencias);
            ps.setDouble(8, ingles);
            ps.setDouble(9, educacaoFisica);
            ps.setDouble(10, artes);
            ps.setDouble(11, religiao);
            
            ps.execute();
            
            return true;
            
        } catch (SQLException ex) {
            Logger.getLogger(AlunoDao.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
        
    }
    
    public Aluno buscar(String nome, int escola) throws SQLException{
        
        Aluno aluno;
        
        String sexo = null; //M-masculino, F-feminino
        int curso = 0; //1-enfermage, 2-informatica, 3-comércio, 4-agroindústria
        
        //Declaração de variáveis para as notas [editavel]
        double portugues = 0;
        double matematica = 0;
        double historia = 0;
        double geografia = 0;
        double ciencias = 0;
        double ingles = 0;
        double educacaoFisica = 0;
        double artes = 0;
        double religiao = 0;
        int qntNotas = 0;

            
            ps = new Conexao().getConnection().prepareStatement("select * from aluno where nome = ? && escola = ?;");
            ps.setString(1, nome);
            ps.setInt(2, escola);
            
            rs = ps.executeQuery();
            
            while(rs.next()){
                
                sexo = rs.getString("sexo");
                curso = rs.getInt("curso");
                
                portugues = rs.getDouble("portugues");
                matematica = rs.getDouble("matematica");
                historia = rs.getDouble("historia");
                geografia = rs.getDouble("geografia");
                ciencias = rs.getDouble("ciencias");
                ingles = rs.getDouble("ingles");
                educacaoFisica = rs.getDouble("educacao_fisica");
                artes = rs.getDouble("artes");
                religiao = rs.getDouble("religiao");
                
            }
            
            aluno = new Aluno(nome, curso, escola, portugues, matematica, historia, geografia, ciencias, ingles, educacaoFisica, artes, religiao);
            
            return aluno;
            
    }
    
    public boolean atualizar(String nome, int escola, int curso, double media){
        
        try {
            
            ps = new Conexao().getConnection().prepareStatement("UPDATE aluno SET curso = ?, media = ? WHERE nome = ? && escola = ?");
            ps.setInt(1, curso);
            ps.setDouble(2, media);
            ps.setString(3, nome);
            ps.setInt(4, escola);
            
            ps.executeUpdate();
            
            return true;
            
        } catch (SQLException ex) {
            Logger.getLogger(AlunoDao.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
        
    }
    
    public ArrayList<Classificacao> classificarAlunosEscolasPublicas(int curso){
        
        ArrayList<Classificacao> classificacao = new ArrayList<Classificacao>();
        
        String nome;
        String escola;
        int tipoEscola;
        double media;
        
        try {
        
            //Primeira consulta - Pegando 32 alunos de escolas públicas e organizando por media
            ps = new Conexao().getConnection().prepareStatement("SELECT aluno.nome, aluno.media, escola.* FROM aluno, escola WHERE aluno.escola = escola.id && aluno.curso = ? ORDER BY aluno.media DESC;");
            ps.setInt(1, curso);
            ResultSet rs = ps.executeQuery();
            
            while(rs.next()){
                
                nome = rs.getString("aluno.nome");
                escola = rs.getString("escola.nome");
                tipoEscola = rs.getInt("escola.tipo");
                media = rs.getDouble("aluno.media");
                
                classificacao.add(new Classificacao(nome, escola, tipoEscola, media));
                
            }
            
        } catch (SQLException ex) {
            Logger.getLogger(AlunoDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return classificacao;
        
    }
    
}
